/**
 * Copyright 2018 Google LLC. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

export default class RandomGenerator {
  static generateRandomZeroPaddedNumber(digits: number): string {
    const value = Math.floor(Math.random() * (Math.pow(10, digits)));
    let str = value + '';
    while (str.length < digits) {
      str = '0' + str;
    }
    return str;
  }

  static generateRandomOrderId(): string {
    // Generate a random number in the form of 'GPA.xxxx-xxxx-xxxx-xxxxx'
    return 'GPA.' 
      + this.generateRandomZeroPaddedNumber(4) + '-' 
      + this.generateRandomZeroPaddedNumber(4) + '-'
      + this.generateRandomZeroPaddedNumber(4) + '-'
      + this.generateRandomZeroPaddedNumber(5);
  }

  static generateUniqueIdFromTimestamp(): string {
    const nowInSeconds = new Date().getTime(); // use this method to avoid Date.now() being mocked
    const offset = 1523940836000; // April 17, 2018 1:53:56 PM GMT+09:00. Only use to reduce number of digits being used
    return (nowInSeconds - offset) + '';
  }
}